/*
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */
package eu.fastl.dragster.exception;

import eu.fastl.dragster.model.ExecutionRecord;
import eu.fastl.dragster.model.ExecutionRecordFactoryProvider;
import eu.fastl.dragster.monitoring.MonitoringServiceProvider;

/**
 * Default implementation of {@link MonitoringExceptionHandler} which just
 * prepends EXCEPTION_ to the existing Monitoring Type
 *
 * @author Ernst Fastl
 */
public class DefaultMonitoringExceptionHandler implements MonitoringExceptionHandler {

    public static final String DEFAULT_TYPE_PREFIX = "EXCEPTION_";

    private String type_prefix = DEFAULT_TYPE_PREFIX;

    public void setType_prefix(String type_prefix) {
        this.type_prefix = type_prefix;
    }

    public void handleException(Throwable exception, ExecutionRecord executionRecord) throws Throwable {
        ExecutionRecord exceptionRecord = ExecutionRecordFactoryProvider.getExecutionRecordFactory().create(
                executionRecord.getExecutionTime(), executionRecord.getUniqueId(),
                this.type_prefix + executionRecord.getType(), executionRecord.getDetail());
        MonitoringServiceProvider.getMonitoringService().recordExecutionTime(exceptionRecord);
        throw exception;
    }

    public void register() {
        MonitoringExceptionHandlerProvider.setMonitoringExceptionHandler(this);
    }
}
